From e2750a4f5e7b893a0a93265c93b26513f185535f Mon Sep 17 00:00:00 2001 From: Ryan Lortie Date: Wed, 25 Jan 2012 11:30:11 -0500 Subject: [PATCH] GtkTimeline: protect the timeline from unref The timeline frame function emits several signals, assuming that the timeline will exist after these signals return. This assumption can be invalid if signal handlers unref the timeline. https://bugzilla.gnome.org/show_bug.cgi?id=668675 --- gtk/gtktimeline.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gtk/gtktimeline.c b/gtk/gtktimeline.c index db9b0beca2..5744e4bfff 100644 --- a/gtk/gtktimeline.c +++ b/gtk/gtktimeline.c @@ -311,6 +311,9 @@ gtk_timeline_run_frame (GtkTimeline *timeline) gdouble delta_progress, progress; guint elapsed_time; + /* the user may unref us during the signals, so save ourselves */ + g_object_ref (timeline); + priv = timeline->priv; elapsed_time = (guint) (g_timer_elapsed (priv->timer, NULL) * 1000); @@ -355,10 +358,13 @@ gtk_timeline_run_frame (GtkTimeline *timeline) } g_timer_stop (priv->timer); g_signal_emit (timeline, signals [FINISHED], 0); + g_object_unref (timeline); return FALSE; } } + g_object_unref (timeline); + return TRUE; } -- 2.30.2